package com.ccp.dev.core.basic.mybatis;

import com.ccp.dev.core.basic.mybatis.dialect.*;

/**
 * @Author: dfz
 * @Date: 2019/5/7 08:38
 * @Description:支持不同数据库方言的枚举类
 */
public enum PageDialectEnum {
    /**
     * ORCL 数据库
     */
    ORCL("oracle", new OracleDialect()),
    /**
     * MYSQL数据库
     */
    MYSQL("mysql", new MySQLDialect()),
    /**
     * DB2数据库
     */
    DB2("db2", new DB2Dialect()),
    /**
     * Derby数据库
     */
    DERBY("derby", new DerbyDialect()),
    /**
     * dm（达梦数据库）
     */
    DM("dm", new DmDialect()),
    /**
     * h2数据库
     */
    H2("h2", new H2Dialect()),
    /**
     * hsql数据库
     */
    HSQL("hsql", new HSQLDialect()),
    /**
     * postgresql数据库
     */
    POSTGRESQL("postgresql", new PostgreSQLDialect()),
    /**
     * sqlserver2005数据库
     */
    SQLSERVER2005("sqlserver2005", new SQLServer2005Dialect()),
    /**
     * sqlserver数据库
     */
    SQLSERVER("sqlserver", new SQLServerDialect()),
    /**
     * sybase数据库
     */
    SYBASE("sybase", new SybaseDialect());
    /**
     * 数据库分页方言的基类
     */
    private Dialect dialect;
    /**
     * 数据库类型
     */
    private String type;

    PageDialectEnum(String dbType, Dialect dialect) {
        this.type = dbType;
        this.dialect = dialect;
    }

    /**
     * 功能描述: 根据传入的数据库类型获取对应的方言Dialect
     *
     * @param: [dbType] 数据库类型
     * @return: com.ccp.dev.core.basic.mybatis.Dialect
     * @auther: dfz
     * @date: 2019/5/7 13:17
     */
    public static Dialect getDialectByDBType(String dbType) {
        for (PageDialectEnum pageDialectEnum : PageDialectEnum.values()) {
            String type = pageDialectEnum.getType();
            if (type.equalsIgnoreCase(dbType)) {
                return pageDialectEnum.getDialect();
            }
        }
        return new Dialect();
    }

    public String getType() {
        return type;
    }

    public Dialect getDialect() {
        return dialect;
    }
}
